<?php

// 定义发送短信接口
interface Message
{
    public function send(string $message);
}
// 实现短信发送接口 - 阿里云
class AliYunMessage implements Message
{
    public function send(string $message)
    {
        // 调用接口，发送短信
        // xxxxxx
        return '阿里云短信发送成功！短信内容：' . $message;
    }
}
// 实现短信发送接口 - 百度云
class BaiduYunMessage implements Message
{
    public function send(string $message)
    {
        // 调用接口，发送短信
        // xxxxxx
        return '百度SMS短信发送成功！短信内容：' . $message;
    }
}
// 实现短信发送接口 - 极光
class JiguangMessage implements Message
{
    public function send(string $message)
    {
        // 调用接口，发送短信
        // xxxxxx
        return '极光短信发送成功！短信内容：' . $message;
    }
}

interface Push
{
    public function send(string $message);
}
class AliYunPush implements Push
{
    public function send(string $message)
    {
        // 调用接口发送客户端推送
        // xxxxxx
        return '阿里云Android&IOS推送成功！推送内容：' . $message;
    }
}
class BaiduYunPush implements Push
{
    public function send(string $message)
    {
        // 调用接口发送客户端推送
        // xxxxxx
        return '百度云Android&IOS推送成功！推送内容：' . $message;
    }
}
class JiguangPush implements Push
{
    public function send(string $message)
    {
        // 调用接口发送客户端推送
        // xxxxxx
        return '极光Android&IOS推送成功！推送内容：' . $message;
    }
}

interface MessageFactory
{
    public function createMessage();
    public function createPush();
}
class AliYunFactory implements MessageFactory
{
    // 实现工厂方法 - 返回阿里云短信接口
    public function createMessage()
    {
        return new AliYunMessage();
    }
    public function createPush()
    {
        return new AliYunPush();
    }
}
class BaiduYunFactory implements MessageFactory
{
    public function createMessage()
    {
        return new BaiduYunMessage();
    }
    public function createPush()
    {
        return new BaiduYunPush();
    }
}
class JiguangFactory implements MessageFactory
{
    public function createMessage()
    {
        return new JiguangMessage();
    }
    public function createPush()
    {
        return new JiguangPush();
    }
}

// 当前业务使用阿里云
// $factory = new AliYunFactory();
// 当前业务使用百度云
// $factory = new BaiduYunFactory();
// 当前业务使用极光
$factory = new JiguangFactory();
$message = $factory->createMessage();
$push = $factory->createPush();
echo $message->send('这个是短信消息') . PHP_EOL;
echo $push->send('这个是推送消息');